/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import 'package:flutter/material.dart';
import 'package:hadss_knock_share/hadss_knock_share.dart';

import 'constants/share_constants.dart';

void main() {
  runApp(const MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool canUseKnockShareState = false;
  bool isOpenShare = false;
  final knockSharePlugin = KnockShare();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: SizedBox(
          width: double.infinity,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              const Padding(padding: EdgeInsets.only(top: 20)),
              Text(canUseKnockShareState ? "该设备支持碰一碰" : "请检测设备是否支持碰一碰"),
              const Padding(padding: EdgeInsets.only(top: 20)),
              TextButton(
                onPressed: () async {
                  bool canUseKnockShare = false;
                  canUseKnockShare =
                      await knockSharePlugin.canUseKnockShare() ?? false;
                  setState(() {
                    canUseKnockShareState = canUseKnockShare;
                  });
                },
                style: const ButtonStyle(
                  backgroundColor: MaterialStatePropertyAll(Colors.blue),
                ),
                child: const Text(
                  "canUseKnockShare",
                  style: TextStyle(color: Colors.white),
                ),
              ),
              const Padding(padding: EdgeInsets.only(top: 20)),
              Text(
                isOpenShare ? "监听中" : "未监听",
                style: const TextStyle(fontSize: 20),
              ),
              const Padding(padding: EdgeInsets.only(top: 20)),
              const Text("纯图片"),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextButton(
                    onPressed: () {
                      if (isOpenShare) {
                        showAlert(context);
                      } else {
                        var shareBean = SharedRecord(UniformDataType.jpeg);
                        shareBean.thumbnailUri =
                            ShareConstants.exampleKnockUrl3;
                        shareBean.uri = ShareConstants.exampleKnockUrl3;
                        addKnockShareListener(shareBean);
                      }
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.addKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                  const Padding(padding: EdgeInsets.all(5)),
                  TextButton(
                    onPressed: () {
                      removeKnockShareListener();
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.removeKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ],
              ),
              const Padding(padding: EdgeInsetsDirectional.only(top: 20)),
              const Text("沉浸式卡片"),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextButton(
                    onPressed: () {
                      if (isOpenShare) {
                        showAlert(context);
                      } else {
                        var shareBean = SharedRecord(UniformDataType.hyperlink);
                        shareBean.content = ShareConstants.hyperlinkUrl;
                        shareBean.thumbnailUri =
                            ShareConstants.exampleKnockUrl1;
                        shareBean.description = ShareConstants.description;
                        shareBean.title = "我看到了中国唯一没有的地貌，峡湾地貌";
                        addKnockShareListener(shareBean);
                      }
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.addKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                  const Padding(padding: EdgeInsets.all(5)),
                  TextButton(
                    onPressed: () {
                      removeKnockShareListener();
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.removeKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ],
              ),
              const Padding(padding: EdgeInsetsDirectional.only(top: 20)),
              const Text("白卡上下布局"),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  TextButton(
                    onPressed: () {
                      if (isOpenShare) {
                        showAlert(context);
                      } else {
                        var shareBean = SharedRecord(UniformDataType.hyperlink);
                        shareBean.content = ShareConstants.hyperlinkUrl;
                        shareBean.thumbnailUri =
                            ShareConstants.exampleKnockUrl2;
                        shareBean.description = ShareConstants.description;
                        shareBean.title = "海岸风光·天气晴朗";
                        addKnockShareListener(shareBean);
                      }
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.addKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                  const Padding(padding: EdgeInsets.all(5)),
                  TextButton(
                    onPressed: () {
                      removeKnockShareListener();
                    },
                    style: const ButtonStyle(
                      backgroundColor: MaterialStatePropertyAll(Colors.blue),
                    ),
                    child: const Text(
                      ShareConstants.removeKnockShareListener,
                      style: TextStyle(color: Colors.white),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }

  void addKnockShareListener(SharedRecord shareBean) {
    knockSharePlugin.setKnockShareData(SharedData(shareBean),
        isAutoClean: true);
    knockSharePlugin.onKnockShare();
    setState(() {
      isOpenShare = true;
    });
  }

  void removeKnockShareListener() {
    knockSharePlugin.offKnockShare();
    setState(() {
      isOpenShare = false;
    });
  }

  void showAlert(BuildContext context) {
    var alert = AlertDialog(
      title: const Text("提示"),
      content: const Text("请先停止当前监听再开启新监听"),
      actions: [
        TextButton(
            onPressed: () {
              Navigator.of(context).pop();
            },
            child: const Text("OK"))
      ],
    );

    showDialog(
        context: context,
        builder: (BuildContext context) {
          return alert;
        }).then((value) => {removeKnockShareListener()});
  }
}
